Several types of cloud-computing solutions have been developed to address the needs of multiple customer segments. One type of solution is Software-as-a-Service (SaaS), in which a cloud-computing service provider provides one or more software applications and the various hardware and software computing resources to execute those applications at the request of a customer. Such a solution frees the customer from the procurement and maintenance of the hardware and software used to execute applications of interest, as well as the upkeep of the applications themselves.
Another type of solution is Platform-as-a-Service (PaaS), to which the customer publishes or otherwise provides the application to be executed to the hardware and software platform supplied by the service provider. In many instances, the hardware and software platform provided may also include a development environment in which the customer may develop and test the application to be executed. Thus, in PaaS offerings, the customer is responsible for more of the execution environment than in the SaaS environment in exchange for greater control over the application.
Representing another level of cloud-computing solution is Infrastructure-as-a-Service (IaaS), in which the service provider offers computing resources in the form of physical or virtual machines, data storage, networks, load balancers, and the like. In some examples, the customer provides any applications to be executed, possibly along with operating system images and other portions of the execution runtime environment for executing the applications. Generally, access to an IaaS is facilitated by way of an application programming interface (API). Typically, IaaS APIs are not standardized, and thus tend to vary from service provider to service provider. As a result, in order to adapt applications to execute on multiple IaaS offerings, the applications may require manual changes to the application to port the applications to each IaaS offering of interest.